package com.dcsgo.v1ch03;

/*
 * switch 表达式(Java 14中引入的)
 * 需要在两个以上的值中做出选择时，可以使用switch表达式
 * case 标签可以是整数、字符串或枚举类型常量
 * 与所有表达式类似，switch表达式也有一个值。
 * 在Java14中，switch有4种形式。这一节只讨论最有用的一种形式。
 */
public class switchExpression {
	public static void main(String[] args) {
		int seasonCode = 1;
		String seasonName = switch (seasonCode) {
		case 0 -> "Spring";
		case 1 -> "Summer";
		case 2 -> "Fall";
		case 3 -> "Winter";
		default -> "???";
		};
		System.out.println(seasonName);// Summer

		// 可以为各个case提供多个标签，用逗号分隔:
		int numLetters = switch (seasonName) {
		case "Spring", "Summer", "Winter" -> 6;
		case "Fall" -> 4;
		default -> -1;
		};
		System.out.println(numLetters);// 6

		// switch 表达式中使用枚举常量时，不需要为各个标签提供枚举名，
		// 这可以从switch值推导得出。例如：
		Size itemSize = Size.MEDIUM;
		String label = switch (itemSize) {
		case SMALL -> "S";
		case MEDIUM -> "M";
		case LARGE -> "L";
		case EXTRA_LARGE -> "XL";
		};
		System.out.println(label);
		//上面这个例子中的，完全可以省略default，因为每个可能的值都有相应的一个case。
		
		/*
		 * 使用整数或String操作数的switch表达式必须有一个default，因为不论操作数
		 * 值是什么，这个表达式都必须生成一个值。
		 * 如果操作数为null，会抛出一个NullPointerException(空指针异常)。
		 * 不知道为啥直接报语法错误!
		 */
	}
}

enum Size {
	SMALL, MEDIUM, LARGE, EXTRA_LARGE
};
